<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


class YandexInflect{
    private $format = 'json';
    private $word = '';
    private $result = array();
    private $error = '';
    private $url = 'http://export.yandex.ru/inflect.xml?name=';

    public function __construct($word, $format = 'xml'){
        $this->word = trim($word);
        $this->result = array_fill(0, 6,$word);
		if(strlen($format)>0){
			$this->format = $format;
		}
    }


    public function getInflect(){
        if(mb_strlen($this->word)==0){
            $this->error = 'Длинна слова должна быть больше 0';
            return false;
        }

        $this->url.=urlencode($this->word);
        if($this->format!='xml'){
            $this->url.='&format='.$this->format;
        }

        $this->getUrl($this->url);


        return $this->result;
    }


    private function getUrl($url){
        $ch = @curl_init($url);
        if(!$ch){
            $this->error = 'Невозможно инициализировать CURL';
            return;
        }

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $r = @curl_exec($ch);
        if(!$r){
            $this->error = 'Невозможно отправить запрос';
            return;
        }


        @curl_close($ch);
        $this->parseResult($r);
       
    }


    private function parseResult($result){
        if(strlen($result)==0)return;
        if($this->format=='xml'){
            $xml = new DomDocument();

            if(!$xml->loadXml($result))return;
            $original = $xml->getElementsByTagName('original');
            $inflection = $xml->getElementsByTagName('inflection');
            if($inflection->length>1){
                for($i=0;$i<$inflection->length;$i++){
                    $this->result[$i] = $inflection->item($i)->nodeValue;
                }
            }
            
        }else if($this->format == 'json'){
            if(function_exists('json_decode')){
                
                $res = json_decode($result);
             }else{
               $res = self::jsonDecode($result);
           }
                
                if(count((array)$res)>2){
                    
                    for ($i=2;$i<count((array)$res);$i++){
                        $this->result[($i-1)] = $res->$i;
                    }
                }
            
        }else{
            $this->error = 'Неизвестный формат данных '.$this->format;
            return;
        }
    }



    private static function jsonDecode($code){
        include_once 'JSON.php';
        $json = new Services_JSON(SERVICES_JSON_IN_OBJ);
        return $json->decode($code);
    }

    public function getError(){
        return $this->error;
    }
}


?>
